home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / zkick301 / kickpatch.asm < prev    next >
Assembly Source File  |  1997-11-28  |  2KB  |  108 lines

  1. *
  2. *    ZKick V3.01 -- Copyright (C) 1991 by Daniel Zenchelsky
  3. *
  4. *        This program may be freely copied, as long as all copyright
  5. *        notices are left intact and unchanged.
  6. *
  7.  
  8.  
  9.    XDEF    KickPatch
  10.  
  11.    XREF    _LOADC0
  12.    XREF    _V175
  13.    XREF   _PRINT
  14.  
  15.    XREF    Reboot
  16.    XREF    _StartKick
  17.    XREF    rtable
  18.    XREF    CheckSum
  19.  
  20.    INCLUDE 'zkick.i'
  21.  
  22. KickMemPtr    EQU    $222
  23. KickTagPtr    EQU    $226
  24. KickCheckSum    EQU    $22a
  25. WarmCapture    EQU    50
  26. CoolCapture    EQU    46
  27. ColdCapture    EQU    42
  28.  
  29. ROMSIZE    EQU    $080000
  30.  
  31. ROMCHECK    EQU    ROMSIZE-$18
  32. ROMLONG    EQU    ROMSIZE/4
  33.  
  34. KickPatch:
  35.  
  36.     PUTMSG <'kickpatch'>
  37.  
  38.     move.l    _StartKick,a0        ; Checksum KickStart image
  39.     move.l    #$80000,d1        ; at _StartKick
  40.     jsr     CheckSum
  41.     tst.l    d0
  42.     beq.s    reloc
  43.                             ; Uh oh, doesn't look like
  44.                             ; KickStart at _StartKick
  45.     PUTMSG <'panic in kickpatch!'>
  46.  
  47.     clr.l    ColdCapture(a6)    
  48.     clr.l    CoolCapture(a6)
  49.     clr.l    WarmCapture(a6)    ; Clear vectors and reboot
  50.     clr.l    KickTagPtr(a6)
  51.     clr.l    KickMemPtr(a6)
  52.  
  53.     jmp Reboot
  54.  
  55. reloc:
  56.     tst.l    _V175
  57.     beq.s    .done
  58.  
  59.     move.l    _StartKick,D0
  60.     sub.l    #$200000,D0
  61.     lea.l    rtable,A0
  62.  
  63. .loop:
  64.     tst.l    (A0)
  65.     beq.s    .done
  66.  
  67.     move.l    _StartKick,A1
  68.     add.l    (A0)+,A1
  69.     add.l    D0,(A1)
  70.     bra.s    .loop
  71.  
  72. .done:
  73.     tst.l    _LOADC0
  74.     beq.s    sum
  75.  
  76.     PUTMSG <'Patching for $C00000 load'>
  77.  
  78.     move.l    _StartKick,A0
  79.     move.l    #$287C0000,$2B2(A0)
  80.     move.l    #$00004E71,$2B6(A0)
  81.     move.l    #$4E714E71,$2BA(A0)
  82.     move.l    #$4E714E71,$2BE(A0)
  83.  
  84. sum:
  85.  
  86. SumKick:    
  87.         PUTMSG <'SumKick'>
  88.  
  89.         MOVE.L    _StartKick,A0
  90.         MOVE.L    A0,A1
  91.         ADD.L    #ROMCHECK,A1
  92.         CLR.L     (A1)
  93.         MOVE.L    #ROMLONG-1,D1
  94.         MOVEQ     #0,D0
  95.  
  96. 1$:        ADD.L     (A0)+,D0
  97.         BCC.S     2$
  98.         ADDQ.L    #1,D0
  99. 2$:        DBRA        D1,1$
  100.  
  101.         SUB.L    #$10000,D1
  102.         BPL.S    1$
  103.         NOT.L    D0
  104.         MOVE.L    D0,(A1)
  105.         RTS
  106.  
  107.     END
  108.